package edu.wtbu.cs.androiddemo.net;


import android.util.Log;



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class AccessToServer {
    private static String TAG = "CustomHttpUrlConnection";
    private static HttpURLConnection conn;
    public AccessToServer() {
    }
    /**
     * 向服务器发送Get请求，获取响应结果
     * @param strUrl     表示需要访问的资源网址;
     * @param names   表示需传递的多个参数名称集合;
     * @param values  表示传递的每个参数所对应的值;
     * @return        返回字符串（通常是JSON格式）
     */
    public static String doGet(String strUrl, String[] names, String[] values) {
        String result="";
        if (names != null) {
            // 当有参数时，将参数拼接在地址后面，并用?隔开，参数间用&隔开
            strUrl += "?";// 在网址后面添加？号
            for (int i = 0; i < names.length; i++) {
                // 循环遍历参数名和参数值，将其拼接
                strUrl += names[i] + "=" + values[i];
                if (i != (names.length - 1)) {
                    // 如果不是最后一个参数则添加&符号
                    strUrl += "&";
                }
            }
        }
        try {
            URL url = new URL(strUrl);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.setConnectTimeout(3000);
            conn.setReadTimeout(4000);
            conn.setRequestProperty("accept", "*/*");
            conn.connect();
            InputStream stream=conn.getInputStream();
            InputStreamReader inReader=new InputStreamReader(stream);
            BufferedReader buffer=new BufferedReader(inReader);
            String strLine=null;
            while((strLine=buffer.readLine())!=null)
            {
                result+=strLine;
            }
            inReader.close();
            conn.disconnect();
            return result;
        } catch (MalformedURLException e) {
            Log.e(TAG, "getFromWebByHttpUrlCOnnection:"+e.getMessage());
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            Log.e(TAG, "getFromWebByHttpUrlCOnnection:"+e.getMessage());
            e.printStackTrace();
            return null;
        }
    }
    /**
     * 向服务器发送Post请求，获取响应结果
     * @param strUrl    表示需要访问的资源网址;
     * @param names  表示需传递的多个参数名称集合;
     * @param values 表示传递的每个参数所对应的值;
     * @return       返回字符串（通常是JSON格式）
     */
    public static String doPost(String strUrl,String[] names, String[] values) {
        String result="";

        if (names != null) {
            // 当有参数时，将参数拼接在地址后面，并用?隔开，参数间用&隔开
            strUrl += "?";// 在网址后面添加？号
            for (int i = 0; i < names.length; i++) {
                // 循环遍历参数名和参数值，将其拼接
                strUrl += names[i] + "=" + values[i];
                if (i != (names.length - 1)) {
                    // 如果不是最后一个参数则添加&符号
                    strUrl += "&";
                }
            }
        }
        try {
            URL url = new URL(strUrl);
            conn = (HttpURLConnection) url.openConnection();
            // 设置是否从httpUrlConnection读入，默认情况下是true;
            conn.setDoInput(true);
            // 设置是否向httpUrlConnection输出，因为这个是post请求，参数要放在
            // http正文内，因此需要设为true, 默认情况下是false;
            conn.setDoOutput(true);
            // 设定请求的方法为"POST"，默认是GET
            conn.setRequestMethod("POST");
            //设置超时
            conn.setConnectTimeout(3000);
            conn.setReadTimeout(4000);
            // Post 请求不能使用缓存
            conn.setUseCaches(false);
            conn.setInstanceFollowRedirects(true);
            // 设定传送的内容类型是可序列化的java对象
            // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
            conn.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded");
            // 连接，从上述第2条中url.openConnection()至此的配置必须要在connect之前完成，
            InputStream in = conn.getInputStream();
            InputStreamReader inStream=new InputStreamReader(in);
            BufferedReader buffer=new BufferedReader(inStream);
            String strLine=null;
            while((strLine=buffer.readLine())!=null)
            {
                result+=strLine;
            }
            return result;
        } catch (IOException ex) {
            Log.e(TAG,"PostFromWebByHttpURLConnection："+ ex.getMessage());
            ex.printStackTrace();
            return null;
        }
    }
}

